﻿#include<iostream>
using namespace std;
//class Date
//{
//public:
//	Date(int year, int month, int day)
//		:_year(year)
//		, _month(month)
//		, _day(day)
//	{
//		
//	}
//	void Print()const
//	{
//		cout << _year << "年" << _month << "月" << _day << "日" << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//typedef int STDataType;
//class Stack
//{
//public:
//	Stack(int n = 4)
//	{
//		_a = (STDataType*)malloc(sizeof(STDataType) * n);
//		if (nullptr == _a)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//		_capacity = n;
//		_top = 0;
//	}
//private:
//	STDataType* _a;
//	size_t _capacity;
//	size_t _top;
//};
// 两个Stack实现队列
//报错的情况：
//class MyQueue
//{
//public:
//	MyQueue(int n, int a)
//		:pushst(n)
//		, popst(n)
//		,_size(a)
//	{
//
//	}
//private:
//	Stack pushst;
//	Stack popst;
//	int _size;
//};
//不报错的情况
//class Date
//{
//public:
//	Date(int year = 2025 , int month = 4, int day = 21)
//		:_year(year)
//		, _month(month)
//		, _day(day)
//	{
//
//	}
//	void Print()const
//	{
//		cout << _year << "年" << _month << "月" << _day << "日" << endl;
//	}
//private:
//	int _year = 10;
//	int _month = 100;
//	int _day = 1000;
//};
//class MyQueue
//{
//public:
//	MyQueue(int a , int n = 100)
//		:pushst(n)
//		, popst(n)
//	{
//		_size = a;
//	}
//	void Print()const
//	{
//		cout << _size << endl;
//	}
//private:
//	Stack pushst =1000 ;
//	Stack popst = 1000 ;
//	int _size = 0;
//};
//int main()
//{
//	MyQueue q(3);
//	q.Print();
//	Date d;
//	d.Print();
//	return 0;
//}
//// 两个Stack实现队列
//class MyQueue
//{
//public:
//	//编译器默认⽣成MyQueue的构造函数调⽤了Stack的构造，完成了两个成员的初始化
//private:
//	Stack pushst;
//	Stack popst;
//};
//int main()
//{
//	Date d1(2025, 4, 21);
//	d1.Print();
//	return 0;
//}
//class A
//{
//public:
//	A(int a)
//		:_a1(a)
//		, _a2(_a1)
//	{
//
//	}
//	void Print() const
//	{
//		cout << _a1 << " " << _a2 << endl;
//	}
//private:
//	int _a2 = 2;
//	int _a1 = 2;
//};
//int main()
//{
//	A aa1(1);
//	aa1.Print();
//	return 0;
//}
//class A
//{
//public:
//	A(int a1 )
//		:_a1(a1)
//	{
//
//	}
//	A(int a1, int a2)
//		:_a1(a1)
//		, _a2(a2)
//	{
//
//	}
//	void Print() const
//	{
//		cout << _a1 << " " << _a2 << endl;
//	}
//	int Get()const
//	{
//		return _a1 + _a2;
//	}
//private:
//	int _a1 = 1;
//	int _a2 = 2;
//};
//class B
//{
//public:
//	B(const A& a)
//		:_b(a.Get())
//	{
//	}
//private:
//	int _b;
//};
//int main()
//{
//	A aa1(1);
//	B bb1 = aa1;
//	return 0;
//}
//class Stack
//{
//public:
//	void Push(const A& aa)
//	{
//	}
//};
//int main()
//{
//	//以前
//	Stack st1;
//	A aa1(7);
//	st1.Push(aa1);
//	Stack st3;
//	A aa3(8, 8);
//	st3.Push(aa3);
//	
//	//现在
//	Stack st2;
//	st2.Push(7);
//	return 0;
//	Stack st4;
//	st4.Push({ 8,8 });
//}
//int main()
//{
//	//调用第一个
//	A aa1(1);
//	//调用第二个
//	A aa2(1, 2);
//	//类型转换
//	A aa3 = 1;
//	A& aa4 = 1;
//	//会报错
//	return 0;
//}
//class A
//{
//public:
//	//错误
//	//不能在初始化列表里面初始化
//	//A(int a)
//	//	:_sout(a)
//	//{
//
//	//}
//private:
//	static int _sout;
//	//错误：
//	//static int _s = 1;
//};
////也不能不初始化
//int A::_sout = 0;
////类的声明
//C c;
//class A
//{
//};
//class B
//{
//};
//class D
//{
//};
////类的声明
//C c;
//int main()
//{
//	A a;
//	B b;
//	static D d;
//	return 0;
//}
//class C
//{
//};
//class A
//{
////public:
//	class B
//	{
//	public:
//		void foo(const A& a)
//		{
//			cout << _k << a._h << endl;
//		}
//		int _b1 = 1;
//		int _b2 = 1;
//	};
////private:
//	static int _k;
//	int _h = 1;
//};
//int A::_k = 1;
//int main()
//{
//	cout << sizeof(A) << endl;
//	return 0;
//}
class A
{
public:
	A(int a = 0)
		:_a(a)
	{
		cout << "A(int a)" << endl;
	}
	A(const A& aa)
		:_a(aa._a)
	{
		cout << "A(const A& aa)" << endl;
	}
	A& operator=(const A& aa)
	{
		cout << "A& operator=(const A& aa)" << endl;
		if (this != &aa)
		{
			_a = aa._a;
		}
		return *this;
	}
	~A()
	{
		cout << "~A()" << endl;
	}
private:
	int _a;
};
A f2()
{
	A aa;
	return aa;
}
int main()
{
	A aa2 = f2();
	return 0;
}
//void f1(A aa)
//{
//}
//int main()
//{
//	f1(1);
//	f1(A(1));
//	return 0;
//}
//int main()
//{
//	A aa1 = 1;
//	A aa2(1);
//	return 0;
//}